package com.ruoyi.union.service.impl;

import java.util.List;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.union.domain.SysActivity;
import com.ruoyi.union.domain.vo.SysActivityVo;
import com.ruoyi.union.mapper.SysActivityMapper;
import com.ruoyi.union.service.ISysActivityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 基层工会活动Service业务层处理
 *
 * @author ruoyi
 * @date 2025-01-15
 */
@Service
public class SysActivityServiceImpl extends ServiceImpl<SysActivityMapper, SysActivity> implements ISysActivityService
{
    @Autowired
    private SysActivityMapper sysActivityMapper;

    /**
     * 查询基层工会活动
     *
     * @param activityId 基层工会活动主键
     * @return 基层工会活动
     */
    @Override
    public SysActivity selectSysActivityByActivityId(Long activityId)
    {
        return sysActivityMapper.selectSysActivityByActivityId(activityId);
    }

    /**
     * 查询基层工会活动列表
     *
     * @param sysActivity 基层工会活动
     * @return 基层工会活动集合
     */
    @Override
    public List<SysActivity> selectSysActivityList(SysActivity sysActivity)
    {
        return sysActivityMapper.selectSysActivityList(sysActivity);
    }

    /**
     * 查询基层工会活动列表（带部门名称和发布人名称）
     *
     * @param sysActivity 基层工会活动
     * @return 基层工会活动集合
     */
    @Override
    public List<SysActivityVo> selectSysActivityVoList(SysActivity sysActivity)
    {
        return sysActivityMapper.selectSysActivityVoList(sysActivity);
    }

    /**
     * 新增基层工会活动
     *
     * @param sysActivity 基层工会活动
     * @return 结果
     */
    @Override
    public int insertSysActivity(SysActivity sysActivity)
    {
        return sysActivityMapper.insertSysActivity(sysActivity);
    }

    /**
     * 修改基层工会活动
     *
     * @param sysActivity 基层工会活动
     * @return 结果
     */
    @Override
    public int updateSysActivity(SysActivity sysActivity)
    {
        return sysActivityMapper.updateSysActivity(sysActivity);
    }

    /**
     * 批量删除基层工会活动
     *
     * @param activityIds 需要删除的基层工会活动主键
     * @return 结果
     */
    @Override
    public int deleteSysActivityByActivityIds(Long[] activityIds)
    {
        return sysActivityMapper.deleteSysActivityByActivityIds(activityIds);
    }

    /**
     * 删除基层工会活动信息
     *
     * @param activityId 基层工会活动主键
     * @return 结果
     */
    @Override
    public int deleteSysActivityByActivityId(Long activityId)
    {
        return sysActivityMapper.deleteSysActivityByActivityId(activityId);
    }

    /**
     * 发布活动（发起审批流程）
     *
     * @param sysActivity 活动信息
     * @return 结果
     */
    @Override
    public boolean publishActivity(SysActivity sysActivity)
    {
        // 设置发布人
        sysActivity.setPublisherId(SecurityUtils.getUserId());
        // 设置初始状态
        sysActivity.setActivityStatus("0"); // 待审核
        sysActivity.setApprovalStatus("0"); // 待审核
        sysActivity.setCurrentParticipants(0);
        
        return insertSysActivity(sysActivity) > 0;
    }

    /**
     * 审核活动
     *
     * @param activityId 活动ID
     * @param approvalStatus 审核状态
     * @param approvalComment 审核意见
     * @return 结果
     */
    @Override
    public boolean approveActivity(Long activityId, String approvalStatus, String approvalComment)
    {
        SysActivity activity = selectSysActivityByActivityId(activityId);
        if (activity != null) {
            activity.setApprovalStatus(approvalStatus);
            
            // 如果审核通过，更新活动状态为已发布
            if ("1".equals(approvalStatus)) {
                activity.setActivityStatus("1"); // 已发布
            }
            
            return updateSysActivity(activity) > 0;
        }
        return false;
    }

    /**
     * 根据部门ID查询活动列表
     *
     * @param deptId 部门ID
     * @return 活动列表
     */
    @Override
    public List<SysActivity> selectSysActivityByDeptId(Long deptId)
    {
        LambdaQueryWrapper<SysActivity> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(SysActivity::getDeptId, deptId);
        return list(wrapper);
    }

    /**
     * 根据发布人ID查询活动列表
     *
     * @param publisherId 发布人ID
     * @return 活动列表
     */
    @Override
    public List<SysActivity> selectSysActivityByPublisherId(Long publisherId)
    {
        LambdaQueryWrapper<SysActivity> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(SysActivity::getPublisherId, publisherId);
        return list(wrapper);
    }

    /**
     * 更新活动状态
     *
     * @param activityId 活动ID
     * @param activityStatus 活动状态
     * @return 结果
     */
    @Override
    public boolean updateActivityStatus(Long activityId, String activityStatus)
    {
        SysActivity activity = selectSysActivityByActivityId(activityId);
        if (activity != null) {
            activity.setActivityStatus(activityStatus);
            return updateSysActivity(activity) > 0;
        }
        return false;
    }

    /**
     * 更新活动报名人数
     *
     * @param activityId 活动ID
     * @return 结果
     */
    @Override
    public boolean updateCurrentParticipants(Long activityId)
    {
        // 这里需要调用报名服务统计人数
        // 暂时返回true，实际实现时需要注入报名服务
        return true;
    }
}
